c++数组和指针
1.指针的运算,++,--,+,-
int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr++; }
2. 如果定义个一个数组var,如果var加上运算符的话是不可以的
比如
int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { *var = i; // 这是正确的语法 var++; // 这是不正确的 } return 0;
3.因为c++中没有String的变量类型,只有char,所以可以用指针数组的形式来表达string
比如
const char *names[MAX] = { "Zara Ali", "Hina Ali", "Nuha Ali", "Sara Ali", }; for (int i = ; i < MAX; i++) { cout << "Value of names[" << i << "] = "; cout << names[i] << endl; } return ;
4.关于指针和数组的一些常识
、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。 、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。 、数组与指针的关系是因为数组下标操作符[],比如,int a[][]相当于*(*(a+)+) 。 、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=。 、指针可以进行加减算术运算,加减的基本单位是sizeof(指针所指向的数据类型)。 、对数组的数组名进行取地址(&)操作,其类型为整个数组类型。 、对数组的数组名进行sizeof运算符操作,其值为整个数组的大小(以字节为单位)。 、数组作为函数形参时会退化为指针。
5.指向指针的指针
int var; int *ptr; int **pptr; var = ; // 获取 var 的地址 ptr = &var; // 使用运算符 & 获取 ptr 的地址 pptr = &ptr; // 使用 pptr 获取值 cout << "Value of var :" << var << endl; cout << "Value available at *ptr :" << *ptr << endl; cout << "Value available at **pptr :" << **pptr << endl;
6.传递指针给函数
using namespace std; void getSeconds(unsigned long *par); int main () { unsigned long sec; getSeconds( &sec ); // 输出实际值 cout << "Number of seconds :" << sec << endl; return ; } void getSeconds(unsigned long *par) { // 获取当前的秒数 *par = time( NULL ); return; }
以上的例子传递一个unsigned long型指针给函数getSeconds,并且在函数内部改变指针的值
7.函数返回类型为指针
// 要生成和返回随机数的函数 int * getRandom( ) { static int r[10]; // 设置种子 srand( (unsigned)time( NULL ) ); for (int i = 0; i < 10; ++i) { r[i] = rand(); cout << r[i] << endl; } return r; } // 要调用上面定义函数的主函数 int main () { // 一个指向整数的指针 int *p; p = getRandom(); for ( int i = 0; i < 10; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } return 0; }
*****:注意函数无法返回一个完整的数组,但是可以返回一个指针
相关推荐
拉斯厄尔高福 2020-10-19
csdnyasin 2020-06-28
penkgao 2020-06-13
qscool 2020-06-12
fengjing81 2020-06-06
AaronPlay 2020-06-02
lynjay 2020-06-02
twater000 2020-05-29
徐建岗网络管理 2020-05-13
qingsongzdq 2020-05-07
jeonkc 2020-05-06
lynjay 2020-05-03
徐建岗网络管理 2020-05-03
shangs00 2020-04-27
xuguiyi00 2020-04-22
qscool 2020-04-18
GoatSucker 2020-04-11