可以请给我解释一下

时间:2019-11-28 17:26:54

标签: c pointers

对于import SwiftUI import UIKit struct TestCustomCellHighlight: View { @State var selection: Int = -1 @State var highlight = false @State var showDetails = false init() { UITableViewCell.appearance().selectionStyle = .none } var body: some View { NavigationView { VStack { NavigationLink(destination: Text("Details \(self.selection)"), isActive: $showDetails) { EmptyView() } List(0..<20, id: \.self) { i in HStack { Text("Item \(i)") Spacer() } .padding(.vertical, 6) .background(Color.white) // to be tappable row-wide .overlay(self.highlightView(for: i)) .onTapGesture { self.selection = i self.highlight = true // delay link activation to see selection effect DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.highlight = false self.showDetails = true } } } } } } private func highlightView(for index: Int) -> AnyView { if self.highlight && self.selection == index { return AnyView(Rectangle().inset(by: -5).fill(Color.red.opacity(0.5))) } else { return AnyView(EmptyView()) } } } struct TestCustomCellHighlight_Previews: PreviewProvider { static var previews: some View { TestCustomCellHighlight() } } n=3,应该计算a={1,2,3},b={4,5,6}。 我不明白为什么会这样,因为p是指针,1*4+2*5+3*6意味着p的地址变成了produs返回的值。

p=produs(a,b,n)

1 个答案:

答案 0 :(得分:1)

当您这样做:

size_t size = 10;
int* x = calloc(size, sizeof(int));

您将获得一个数组x,其中包含10个项目,索引为0..9,而不是1..10。这里的calloc用于使请求的内容更加清晰,而不是进行可能是神秘的或钝的乘法。

因此,要进行迭代:

for (int i = 0; i < size; ++i) {
  x[i] ...
}

由于假设数组是1..N而不是0 ..(N-1),因此代码中存在许多偏离一的错误。

将所有内容放在一起并清理代码会产生:

    #include <stdio.h>
    #include <stdlib.h>

    void citire(int *x, size_t s)
    {
        for(int i=0; i < s; i++)
            scanf("%d", &x[i]);
    }

    int produs(int *a, int* b, size_t s)
    {
        int produs = 0;

        for(int i = 0; i < s; i++)
            produs = a[i] * b[i] + produs;

        return produs;
    }

    int main()
    {
        int n;
        scanf("%d",&n);

        int* a = calloc(n, sizeof(int));
        int* b = calloc(n, sizeof(int));

        citire(a, n);
        citire(b, n);

        // produs() returns int, not int*
        int p = produs(a,b,n);
        printf("%d", p);

        return 0;
    }

您在指针不属于的地方使用指针。在C语言中,将指针传递给单个值的意思是“这是可变的”,但是您无需更改这些值,因此不需要指针,也不建议这样做。

尝试使用size_t作为“事物的大小”类型。这就是整个C语言中使用的值,并且它是一个无符号值,因为负索引或数组长度没有任何意义。