c 第八天(指针一)

今天主要学习的是指针 下面是今天记得各种知识点

指针变量

int *p = NULL;


&对变量取地址

*是对指针变量 (针对地址操作) 取地址内容


float * ff = &f;

    float *dd = ff;

    *ff = 10;

    printf("%p ",&(*ff));

注意 定义时*是类型定义的一部分整体式int* 型

而到运算时 *是取地址内的值的运算符


"*"和"&"是互逆操作


指针必须有明确的(自己定义的)指向    (赋初值,或者定义后就使用);

指针的指向要有足够空间




 char a[3] = {1,4,6};

    char *p = a;

    //*a == *p ==a[0] == p[0]

    //*a[n] = *(a+n) = *p[n] = *(p+n)

    printf("%d\n",p[2]);

    for (int i = 0 ; i < 3; i ++) {

        printf("%d\n",++(*p));

    }

    




指针和数组区别

1 所占空间不同

指针所占的空间只和操作系统位数有关

数组所占空间与元素个数有关.

2 数组名是常量地址 指针是变量地址


int a = 5

char *p = &a;

*p = 5

*p+1 = 0

*p+2 = 0

*p+3 = 0

因为int是4位 char 1位 


指针的移动和取值和指针的类型有关

面试题

如何判断一个机器内核

void nh()

{

    int a = 1;

    if(*(char *)&a == 1){

        printf("intel");

    }else{

        printf("AMD");

    }

}


void *a 

void 泛型指针 不能操作指针内的数据


]char *string = "iphone";


字符串是常量~~~

任何字符串是常量~~~~

数组存储的是字符串常量的地址~~~~


不要抱着java的思想去做c


总结一下对于指针的今天所得,指针我的理解就像唱片机上的针 它能调用各个地址(唱片上得地方)的数据,播放这些数据,计算机中任何数据都是要存取的

 所以指针也是有存储的地方和大小的 指针的大小只和计算机的操作系统有关,和其他无关.指针的使用,肯定不是一言半语能说完的,要多加练习

void sysin(int *a,int number)
{
    printf("输入%d个数\n",number);
    for (int i = 0 ; i < number; i++) {
        scanf("%d",a+i);
    }
}

void change(int *a,int number)
{
    int max = *a,min = *a,temp= 0,k = 0,j=0;
    for (int i = 0 ; i < number; i++) {
        if (max < *(a+i)) {
            max = *(a+i);
            k = i;
        }
    }
    temp =*(a+k);
    *(a+k) = *(a+number-1);
    *(a+number-1) = temp;
    
    for (int i = 0 ; i < number; i++) {
        if (min > *(a+i)) {
            min = *(a+i);
            j = i;
        }
    }
    temp =*(a+j);
    *(a+j) = *a;
    *a = temp;
}

void syso(int *a,int number)
{
    for (int i = 0 ; i < number; i++) {
        printf("%d ",*(a+i));
    }
}

void homework1()
{
    /*
     1、输入10个整数,将其中最小的数与第一个数对换,
     把最大的数和最后一个数对换,写3个函数:(1)输入10个数;
     (2)进行处理;(3)输出10个数。
     */
    int a[4] = {0};
    int *p = a;
    sysin(p,4);
    change(p,4);
    syso(p,4);
}

void sort(char *a[],int number)
{
    char *temp = NULL;
    for (int i = 0 ; i < number-1; i++) {
        for (int j = 0 ; j < number - i - 1; j++) {
            if( strcmp(a[j], a[j+1]) < 0){
                temp = a[j];
                a[j]  = a[j+1];
                a[j+1]= temp;
            }
        }
    }
}


void homework2()
{
    /*
     2、在主函数中输入10个等长的字符串。用另一个函数对它们排序,
        然后在主函数输出10个已经排好的字符串。
     */
    
    char string[10][10]= {0};
    char *str[10] = {0};
    for (int i = 0 ; i < 10; i++) {
        str[i] = string[i];
    }
    printf("输入相同长度的字符串");
    for (int i = 0; i < 10; i++) {
        scanf("%s",string[i]);
    }
    
    sort(str,10);
    for (int i = 0 ; i < 10; i ++) {
        printf("%s\n",str[i]);
    }
}

void cut(char *a)
{ 
    char *p = a ,*point = a;
    while (true) {
        if(*p < '0' || *p > '9'){
            *point = *p;
            point++;
            if (*p == '\0' ) {
                    break;
                }
        }
        p++;
    }
    printf("%s",a);
}

void homework3()
{
    /*
     有一字符串,包含数字与字母,编程去除数字。
     1、要求在原字符串中操作
     2、使用指针处理。
     */
    char a[] ="s3de2cf303cdsf";
    cut(a);

}

void fun(int x , int *pp,int *n)
{
    int k = 0 ;
    int *qq = pp;
    for (int i = 2 ; i <= x; i = i+2) {
        if(x % i == 0 ){
            *qq = i;
            (*n)++;
            k++;
            qq++ ;
        }
    }
    for (int i =0 ; i < *n; i++) {
        printf("%d ",*(pp+i));
    }
}
int main(int argc, const char * argv[])
{
//    homework3();
    int pp[100] ={0};
    int a = 0 ;
    int *n = &a;
    fun(128 , pp,n);
   
    return 0;
}

另外今天也看了点C++的知识

C++赋初值

int main(int argc, const char * argv[])

{

    int sum = 0 ;   

    for (int i = 0 ; i < 10 ; i++) {

        sum++;

    }

    std::string str;

    char a;

    short b;

    int c ;

    long d ;

    float e;

    double f ;

    std::cout << "a = " << a <<"\n";

    std::cout << "b = " << b <<"\n";

    std::cout << "c = " << c <<"\n";

    std::cout << "d = " << d <<"\n";

    std::cout << "e = " << e <<"\n";

    std::cout << "f = " << f <<"\n";

     std::cout << "str = " << str <<"\n";

    return 0;

}


第一次


a = 

b = 32767

c = 1606416624

d = 1

e = 4.59163e-41

f = 6.95322e-310

str =

以后


a = 

b = 0

c = 0

d = 0

e = 0

f = 0

str = 


这证明C++中对于变量的初值还是不确定的 

所以 定义一个变量马上赋初值是必要的.


栈的理解

相当于向上压的一个机器 只有一个出口,所以地址越高 越先进站,越后出栈.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值