30天试用过期,使用以下visual studio 2019密钥,亲测可用企业版的可用:
企业版:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF
专业版:NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y
1、最简单的指针理解,基本上记着以下代码就行:
int var =2;
int* p=&var;
注意*的位置,放这里是最好理解的,解决了我很久的迷茫问题。
取变量var的地址赋给p,声明这是个指针。
2、空指针
空指针不指向任何对象,使用nullptr来初始化指针
菜鸟上这句话没看懂
正常的话
//int* p=NULL;过去用NULL,现在少用了
int* p=nullptr;
cout << p<<endl;
输出为00000000
如果改为
int* p =NULL;
cout << * p <<endl;
此时则报错
输入代码
int main()
{
int var1;
char var2[10];
cout << "var1变量的地址: " << &var1 << endl;
cout << "var2变量的地址: " << var2 << endl;
system("pause");
}
竟然数组出现乱码情况
3、指针数组
如果指针指向int类型的数组,代码如下:
const int MAX=3;
int main()
{
int var[MAX]={10,100,200}
int* ptr[MAX];
for (int i = 0;i<MAX;i++)
{
ptr[i]=&var[i];
cout << "Value of var["<<i<<"] = "<< *ptr[i] <<endl;
}
其输出为
Value of var[0] = 10
Value of var[0] = 100
Value of var[0] = 200
如果指针指向字符类型的指针数组来存储一个字符串列表
const int MAX = 4;
int main()
{
const char *name[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
for (int i=0;i<MAX;i++)
{
cout <<"Value of names["<< "] = " << names[i]<<endl;
}
输出为
Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali
4、指针的指针(多级间接寻址)
int main()
{
int var;
int* ptr;
int** pptr;
var = 3000;
ptr = &var;
pptr = &ptr;
cout << "var的值为: " << var << endl;
cout << "*ptr的值为: " << *ptr << endl;
cout << "**pptr的值为: " << **pptr << endl;
cout << "var的地址为: " << &var << endl;
cout << "ptr的地址为: " << &ptr << endl;
cout << "pptr的地址为: " << &(pptr) << endl;
system("pause");
return 0;
}
运行结果为
var的值为: 3000
*ptr的值为: 3000
**pptr的值为: 3000
var的地址为: 0097F78C
ptr的地址为: 0097F780
pptr的地址为: 0097F774
这个地方我一直没理解,ptr 是个指针,其值为ptr=&var;pptr也是个指针,其值为pptr=&var,**pptr=*ptr=var。我一直认为指针的指针
pptr是个地址,其实是搞错了,pptr是个地址,pptr=&ptr,而不是pptr=&ptr
把这个搞清楚了,指针的指针就清晰明了了。ptr、pptr代表的是指针指向的地址!!!
5、传递指针给函数
C++允许传递指针给函数,只需要简单声明函数参数为指针类型即可。
void getSeconds(unsigned long* par);
int main()
{
unsigned long sec;
getSeconds(&sec);
cout << "Number of seconds: " << sec << endl;
system("pause");
return 0;
}
void getSeconds(unsigned long* par)
{
*par = time(NULL);
return;
}
能够接受指针作为参数的函数,也能接受数组作为参数:
double getAverage(int* arr, int size);
int main()
{
int balance[5] = { 1000,2,3,17,50 };
double avg;
// avg = getAverage(&balance[0], 5);
avg = getAverage(balance, 5);
cout << "Average value is: " << avg << endl;
system("pause");
return 0;
}
double getAverage(int* arr, int size)
{
int i, sum = 0;
double avg;
for (i = 0; i < size; i++)
{
sum += arr[i];
}
avg = double(sum) / size;
return avg;
}
6、从函数返回指针
这个还没搞懂,大致意思就是函数返回值是个指针吧
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 << "): " << *(p + i) << endl;
}
system("pause");
return 0;
}
输出为
12714
16286
28357
20152
15710
481
3880
29265
5511
15555
*(p+0): 12714
*(p+1): 16286
*(p+2): 28357
*(p+3): 20152
*(p+4): 15710
*(p+5): 481
*(p+6): 3880
*(p+7): 29265
*(p+8): 5511
*(p+9): 15555